#include <bits/stdc++.h>
using namespace std;
const int maxn = 10, maxm = 1030, maxx = 5000 + 10;

double f[maxx][maxm]; // 修改：交换维度顺序

struct node {
  int cost, score;
  double percent;
} pro[maxn];

int main() {
  int n, x;
  scanf("%d %d", &n, &x);
  for (int i = 0; i < n; i++) {
    int p;
    scanf("%d %d %d", &pro[i].score, &pro[i].cost, &p);
    pro[i].percent = p / 100.0;
  }
  double ans = 0;
  // f[i][s]： 花费i元， 状态为s时的最大期望
  for (int i = 1; i <= x; i++) {
    for (int s = 0; s < (1 << n); s++) {
      for (int k = 0; k < n; k++) {
        if ((s & (1 << k)) == 0 || i < pro[k].cost)
          continue;
        double val1 =
            (f[i - pro[k].cost][s ^ (1 << k)] + pro[k].score) * pro[k].percent;
        double val2 = f[i - pro[k].cost][s] * (1 - pro[k].percent);
        f[i][s] = max(f[i][s], val1 + val2);
      }
      ans = max(ans, f[i][s]);
    }
  }

  printf("%.6lf", ans);
  return 0;
}